// 导入登录接口获取token,获取信息接口,获取用户头像接口
import { login, getProfile, getStaffPhoto } from '@/api/user'
// 引入持久化token的文件
import { getToken, setToken, removeToken, getTimeStamp, setTimeStamp } from '@/utils/auth'
import { resetRouter } from '@/router/index'
export default {
  namespaced: true,
  //1.state是存储对象
  state: {
    // token值
    token: getToken() || '',
    // token: localStorage.getItem('token') || ''
    // 用户信息
    user: {},
    // 存储动态路由
    routes: []
  },
  //2.mutations是唯一修改数据对象
  mutations: {
    //设置token
    setToken (state, token) {
      state.token = token
      // 持久化token
      setToken(token)
      // 持久化
      // localStorage.setItem('token', token)
    },
    //删除token
    delToken (state) {
      state.token = ''
      // 删除token
      removeToken()
      // localStorage.removeItem()
    },
    // 用户信息
    setUserInfo (state, value) {
      state.user = value
    },
    // 删除用户信息
    delUserInfo (state) {
      state.user = {}
    },
    // 动态路由
    filterRoutes (state, routes) {
      state.routes = routes
    }
  },
  //3.actions:是vuex中异步修改的数据
  actions: {
    // 获取用户信息函数
    async setUserInfo (context) {
      //用户信息
      let res = await getProfile()
      //用户头像
      let info = await getStaffPhoto(res.data.userId)
      //用户信息和用户头像拼接到一起
      context.commit('setUserInfo', { ...res.data, ...info.data })
      // 因为setUserInfo是一个函数,所以可以使用return
      return res.data.roles.menus
    },
    // 获取token函数
    async userlogin (context, formdata) {
      // 发送请求获取token
      let res = await login(formdata)
      // context相当于store这个实例对象
      context.commit('setToken', res.data)
      // 获取时间戳
      getTimeStamp()
    },
    login (context) {
      context.commit('delToken')
      context.commit('delUserInfo')
      // 重制路由信息
      resetRouter()
    }
  },

}
